生成 Deep Learning 絵を描き、物語や音楽を作り、ゲームをプレイする
https://gyazo.com/aca1fd7063cdfd51ca881b01377fcc05
生成型ディープラーニングの解説書。「絵を描く」「曲を作る」といった、これまで人間にしかできないと思われていた創造的な作業を機械に行わせるという、いま最もホットな技術の基礎から応用までをJupyterノートブック環境で実際に試しながら学びます。第I部は基礎編です。機械学習プログラミング、変分オートエンコーダ、GANやRNNなど、生成モデルの作成において重要な基礎技術を学びます。第II部は応用編です。CycleGAN、エンコーダ―デコーダモデル、MuseGANなどのモデルを作成し、作画、作文、作曲といった創造的なタスクに取り組みます。さらには、実環境を用いずにゲームプレイの学習を可能にする、世界モデルを使った強化学習にも取り組みます。
目次
賞賛の声
訳者まえがき
まえがき
第I部 生成型ディープラーニング入門
1章 生成モデリング
1.1 生成モデリングとは何か?
データセットがどのように生成されるかを確率モデルの観点から記述する
このモデルからサンプリングすることで新しいデータを生成できる
1.1.1 生成モデリングと識別モデリング
識別モデリングは観測xが与えられたときのラベルyの確率を推定する
生成モデリングは観測xが観測される確率を推定する
1.1.2 機械学習の進歩
MLaaS
1.1.3 生成モデリングの隆盛
現在の神経科学の理論は、「私達の現実の認識の仕方は、感覚を入力して今何を経験しているかの予測を出力するという高度に複雑な識別モデルではなく、産まれたときから訓練されて、未来に正確にマッチする環境のシミュレーションを出力する生成モデルである」と示唆しています
1.1.4 生成モデリングの枠組み
pmodel
1.2 確率生成モデル
標本空間
観測xが取りうるすべての値の完全な集合
密度関数
確率密度関数
標本空間内の点xを0から1の数字に写像する関数
合計は1
パラメトリックモデリング
有限個のパラメータ群θを使って記述できる密度関数の一種
尤度
L(θ|x)
xが与えられたときのθのもっともらしさ
ふつう対数尤度を使う
最尤推定
ある観測されたデータXを説明する最もありそうな密度関数pθ(x)を推定する
MLE
1.2.1 Hello Wrodl!
1.2.2 最初の確率生成モデル
特徴の異なる組み合わせは全部で4032通り
標本空間には4032個の点がある
多項分布
まだ現れていないものは決して生成できない
加算スムージング
仮想カウントとして1を追加
データから学習された固有の構造によって、より標本空間内にありそうだと信じられる領域に重みを増すようにしたい
1.2.3 単純ベイズ(Naive Bayes)
単純ベイズ仮定
各特徴xjは他のすべての特徴xkと独立であると単純に仮定
p(xj|xk) = p(xj)
確率の連鎖率を使って密度関数を条件付き確率の積として記述
パラメータθを推定し、それらを乗算して可能な各組み合わせの確率を求めることに集約される
元のデータにはなかった新しい例を生成できる
1.2.4 Hello Wrodl!の続き
ピクセルだとうまく生成できない!
1.3 生成モデルの課題
ピクセル値は高度に相関があり、標本空間は広大
特徴間に存在する高度な条件付き、依存性にモデルがどうやって対処するか?
高次元の標本空間から、生成される可能性のあるごく小さい部分の1つの観測を、モデルがどうやって見つけるか?
関連する構造をデータから推察できるモデルが必要
ディープラーニング
1.3.1 表現学習
ある低次元の潜在空間を使って訓練セット内の各観測を記述
その後、潜在空間の中の1点を取り、それを元の領域の一点に写像する写像関数を学習する
与えられた特徴の集合に、単に値を割り当てるだけではない
どの特徴が最も重要か、実際にそれらの特徴を生のデータからどのように生成するかを学習する
https://gyazo.com/bd4a10a2a691a4af520695263aee00f7
高レベルの特徴
1.4 環境のセットアップ
tensorflow_2 ブランチにチェックアウトして環境構築すること!
次に、python -m pip install --upgrade pip でpipのバージョンを上げる
Pillow==6.2.0 のインストールに失敗するらしい
python -m pip install Pillow したら 9.2.0 が入った
もっかい install -r requirements.txt を叩く
virtualenv
virtualenvwrapper
1.5 まとめ
2章 ディープラーニング
構造化されていないデータの高レベルな表現を学習するため、積み重なった複数の処理ノートの層を用いる機械学習のあるアルゴリズムの1つ
2.1 構造化されたデータと構造化されていないデータ
構造化されていないデータ
画像、音楽、動画
構造が特徴量の並びという形にはならない
入力される特徴量に意味があり、空間的な依存関係はない
2.2 ディープニューラルネットワーク
一連の積み重なった層
ノードを含む
重みの集合を通して前の層のノードと接続される
全結合層
訓練
予測が最も正確になるようにそれぞれの層の重みを決定する処理
誤差逆伝播
出力が正解と比較された後、予測結果の誤差がネットワークを通じて逆方向に伝播され、それぞれの重みをその予測が最も泳ぐ改善される方向に少しだけ調整する処理
2.2.1 KerasとTensorFlow
2.3 最初のディープニューラルネットワーク
2.3.1 データを読み込む
2.3.2 モデルを作成する
Sequantialモデル
functional API
おすすめ
活性化関数
ReLU
LeakyReLU
負のとき0にならない
sigmoid
softmax
総和が1
他クラス分類問題で便利
2.3.3 モデルをコンパイルする
損失関数
平均二乗誤差
他クラス交差エントロピー
二値交差エントロピー
オプティマイザ
Adam
RMSProp
2.3.4 モデルを訓練する
fit
2.3.5 モデルを評価する
2.4 モデルを改善する
2.4.1 畳み込み層
空間構造を考慮する
フィルタ(カーネル)
KerasではConv2D
ストライド
その層が入力画像上でフィルタを移動させるのに使用するステップサイズ
パディング
画像の外領域を埋めてストライドするか
2.4.2 バッチの正規化
勾配爆発
重みが大きくなりすぎたとき
共変量シフト
バッチ正規化層を入れることで軽減
バネでつなぐ
スケールとシフト、2つの重み
BatchNormalization
全結合層や畳み込み層の後
2.4.3 ドロップアウト層
未知のデータに対して汎化
過学習(過剰適合)するおそれ
回避するために正規化
ドロップアウト層を入れる
訓練時だけ
Dense層の後
ただし現在はバッチ正規化が普通
2.4.4 すべてをまとめる
BAD
2.5 まとめ
3章 変分オートエンコーダ
3.1 展覧会
3.2 オートエンコーダ
エンコーダ
高次元の入力データをより低次元の表現ベクトルに圧縮する
デコーダ
与えられた表現ベクトルをもとの領域に復元する
オートエンコーダのネットワークは
結果との誤差を最小化する重みを見つけるよう訓練
3.2.1 最初のオートエンコーダ
3.2.2 エンコーダ
入力画像を取り、それを潜在空間のある一点に写像する
3.2.3 デコーダ
畳み込み層の代わりに転置畳み込み層を使う
画像のピクセルの間を0でパディングする際の0の個数
Conv2DTranspose
3.2.4 エンコーダとデコーダを連結する
RMSEか二値交差エントロピー
後者はおとなしくなる
3.2.5 オートエンコーダの解析
ランダムな点?サンプリング難しい
多様性の欠如
店の存在しない広い空間
3.3 変分展覧会
3.4 変分オートエンコーダの作成
3.4.1 エンコーダ
潜在空間内のある店の周りの多変量正規分布に写像される
https://gyazo.com/0dbe033c2159b3f657945214951600b3
サンプリングする
epsilon
分布の平均の点
mu
各次元の分散、の対数
log_var
3.4.2 損失関数
KL情報量
ある確率分布がもう一つのとどれだけ違っているかを測定する方法
標準正規分布と
3.4.3 変分オートエンコーダの解析
3.5 VAEを使った顔生成
3.5.1 VAEの訓練
3.5.2 VAEの解析
3.5.3 新しい顔の生成
3.5.4 潜在空間内での計算
3.5.5 顔のモーフィング
3.6 まとめ
変分オートエンコーダは、潜在空間内の点の分布の仕方を変えることで問題を解決する
4章 敵対的生成ネットワーク
4.1 ガニマル
4.2 GAN入門
生成器と識別器の間の戦い
4.3 初めてのGAN
4.3.1 識別器
4.3.2 生成器
アップサンプリング
UpSampling2D
Conv2DTransposeでは0で埋めていた
代わりに既存のピクセル値を繰り返す
Conv2Dと組み合わせて使う
4.3.3 GANを訓練する
4.4 GANの課題
4.4.1 損失の振動
4.4.2 モード崩壊
4.4.3 意味がない損失
4.4.4 ハイパーパラメータ
4.4.5 GANの課題に取り組む
4.5 Wasserstein GAN
4.5.1 Wasserstein損失
4.5.2 Lipschitz制約
4.5.3 重みをクリッピングする
4.5.4 WGANを訓練する
4.5.5 WGANの分析
4.6 WGAN-GP
4.6.1 勾配ペナルティ損失
4.6.2 WGAN-GPの分析
4.7 まとめ
第II部 コンピュータに作画、作文、作曲、ゲームプレイを教える
5章 描く
5.1 リンゴとオレンジ
5.2 CycleGAN
pix2pix
ソース領域とターゲット領域のペアが必要
一方向
CycleGAN
双方向
5.3 初めてのCycleGAN
Keras-GAN
5.3.1 概要
2つの生成器
2つの識別器
5.3.2 生成器(U-Net)
スキップ接続
ダウンサンプリング時
何の画像か学習し、どこにあるかという情報は失う
Concatenate
貼り合わせる
インスタンス正規化
InstanceNormalization
5.3.3 識別器
PatchGAN
画像をオーバーラップする正方形のバッチに分割して、各バッチが本物か偽物か推測
5.3.4 CycleGANをコンパイルする
以下の評価基準で同時に生成器を判定
妥当性
復元性
同一性
5.3.5 CycleGANを訓練する
5.3.6 CycleGANを解析する
5.4 モネのような絵を描くCycleGANを作る
5.4.1 生成器(ResNet)
ResNet
残差ブロックを積み重ねる
5.4.2 CycleGANの解析
5.5 ニューラルスタイル変換
以下の三つの異なる部分の加重和である損失関数を最小化
コンテンツ損失
スタイル損失
全変動損失
勾配降下法
誤差逆伝播ではない
5.5.1 コンテンツ損失
予め訓練されたネットワーク
VGG19
19層の畳み込みニューラルネットワーク
ImageNetデータセットからの100万を超える画像で訓練されている
画像を1000個の物体のカテゴリに分類できる
5.5.2 スタイル損失
スタイルが似ている画像は、所定の層における特徴マップ間の相関のパターンが同じ
Gram行列
その層のすべての可能なペアの間の内積を格納した行列
この類似性を調べる
5.5.3 全変動損失
ノイズを計測
5.5.4 ニューラルスタイル変換を実行する
5.5.5 ニューラルスタイル変換モデルを解析する
5.6 まとめ
6章 書く
テキストデータの違い
離散的
誤差伝播法が適用できない
時間次元
変更に敏感
規則に基づく文法構造
6.1 やっかいな悪党のための文芸クラブ
6.2 LSTMネットワーク
長・短期記憶
特別なタイプの再帰型ニューラルネットワーク(RNN)
再帰層(セル)を持ち、ある特定の時間ステップにおける再帰層のからの出力を次の時間ステップへの入力の一部とできる
時系列データを扱える
6.3 初めてのLSTMネットワーク
Progect Gutenburg
6.3.1 トークン化する
単語で
小文字に変換
未知語用のトークンに置き換え
語幹化で縮退
句読点をトークン化or削除
訓練データが持つ語彙以外の単語を予測できない
文字で
新しい単語を形成しうる
大文字
語彙は小さくなるが訓練速度は速くなる
6.3.2 データセットを作成する
6.3.3 LSTMのアーキテクチャ
6.3.4 埋め込み層
ルックアップテーブル
6.3.5 LSTM層
6.3.6 LSTMセル
6.4 新しいテキストを生成する
テキスト生成器
予測入力
6.5 RNNの拡張
6.5.1 多層再帰型ネットワーク
多数のLSTM層
6.5.2 GRU
忘却ゲート→リセットゲート、入力ゲート→更新ゲート
出力ゲート、セル状態→なし。出力は隠れ状態だけ
6.5.3 双方向セル
前後の情報の両方から学習できる
6.6 エンコーダ–デコーダモデル
入力された時系列データに関連する完全に異なる単語列を予測したい場合
翻訳
質問生成
テキストの要約
処理
エンコーダRNNで単一ベクトルにまとめる
デコーだRNNをこれで初期化
確率分布を出力
教師強要
6.7 質問回答生成器
6.7.1 質問と回答のデータセット
6.7.2 モデルのアーキテクチャ
GloVe単語ベクトル
Global Vectors for Word Representation
6.7.3 推論
6.7.4 モデルの出力
ポインターネットワーク
アテンション機構
6.8 まとめ
7章 作曲する
7.1 準備
音楽生成を始めるためのPythonを使った優れたリソース
Sigurður Skúliのブログの投稿
7.1.1 音楽の表記
code:import.py
from music21 import converter
dataset_name = 'cello'
filename = 'cs1-2all'
file = "./data/{}/{}.mid".format(dataset_name, filename)
original_score = converter.parse(file).chordify()
chordify()
同時に演奏される音符を複数のパートに分割せずに1パートの和音に詰め込める
ポリフォニックな音楽ではパートを分けたいかも
データを抽出
テキストデータに似てきた
単語は音程・長さに相当
7.2 初めての音楽生成RNN
各音程と長さに整数値を割り当てる
データを32この音符の小さい塊に分割する
訓練セットと、一連の音符の次の音符(one-hotエンコード)とを作る
アテンション機構
今や洗練されたほとんどの時系列生成モデルに不可欠
トランスフォーマとなった
7.2.1 アテンション
エンコーダ-デコーダネットワークの問題点
コンテクストベクトルがボトルネックになりうる
原文の最初の方にある情報が、コンテクストベクトルに到達するまでに薄められてしまう可能性
エンコーダを通している間保持し続けるだけでなく、デコーダを通している間も同じように保持しないとならない
音楽でも、直近の情報だけではなく、時間をさかのぼったシーケンスからの情報を使うことが重要
8音符前のネッワークの隠れ状態に対しても特別な注意を払いたい
アテンション機構
エンコーダRNNの最後の隠れ状態だけを使うのではなく、以前の各時間ステップでの隠れ状態の加重和としてコンテクストベクトルを作成できるようになる
7.2.2 Kerasでアテンション機構を作成する
7.2.3 アテンション機構付きRNNの解析
7.2.4 エンコーダ–デコーダネットワークのアテンション機構
ハーモニー予測
今回
リズム予測
ドラムトラックなどに適している
7.2.5 ポリフォニックな音楽を生成する
7.3 MuseGAN
7.4 初めてのMuseGAN
7.5 MuseGAN生成器
7.5.1 和音、スタイル、旋律、グルーブ
7.5.2 小節生成器
7.5.3 すべてをまとめる
7.6 評価器
7.7 MuseGANの解析
7.8 まとめ
8章 プレイする
8.1 強化学習
8.1.1 OpenAI Gym
8.2 世界モデルのアーキテクチャ
8.2.1 変分オートエンコーダ
8.2.2 MDN-RNN
8.2.3 コントローラ
8.3 セットアップ
8.4 訓練プロセスの概観
8.5 ランダムなロールアウトデータを収集する
8.6 VAEを訓練する
8.6.1 VAEのアーキテクチャ
8.6.2 VAEを探索する
8.7 RNNを訓練するデータを収集する
8.8 MDN-RNNを訓練する
8.8.1 MDN-RNNアーキテクチャ
8.8.2 MDN-RNNから次のzと報酬をサンプリングする
8.8.3 MDN-RNNの損失関数
8.9 コントローラを訓練する
8.9.1 コントローラのアーキテクチャ
8.9.2 CMA-ES
8.9.3 CMA-ESを並列化する
8.9.4 コントローラの訓練からの出力
8.10 夢の中での訓練
8.10.1 夢の中でのコントローラの訓練
8.10.2 夢の中での訓練の課題
8.11 まとめ
9章 生成モデリングの未来
9.1 LSTMネットワーク
9.2 トランスフォーマ
9.2.1 位置エンコード処理
9.2.2 マルチヘッドアテンション
9.2.3 デコーダ
9.2.4 トランスフォーマの分析
9.2.5 BERT
9.2.6 GPT-2
9.2.7 MuseNet
9.3 画像生成での進展
9.3.1 ProGAN
9.3.2 SAGAN
9.3.3 BigGAN
9.3.4 StyleGAN
9.4 生成モデリングの応用
9.4.1 AIアート
9.4.2 AIミュージック
10章 まとめ
付録A GPT-3
A.1 はじめに
A.2 GPT-2との違い
A.3 GPT-3の性能
A.4 GPT-3の応用
A.5 GPT-3の課題
A.6 おわりに
参考文献
索引